Bug 788093 - Crash loading (jpg with) ICC v4 profile with parametric TRCs
authorEll <ell_se@yahoo.com>
Sun, 24 Sep 2017 21:34:00 +0000 (17:34 -0400)
committerEll <ell_se@yahoo.com>
Sun, 24 Sep 2017 21:39:28 +0000 (17:39 -0400)
Fix parameter offset calculation of parametric TRCs, so that we
parse them correctry.

babl/babl-icc.c

index fe146f6f7eea31ba878bb8ba1b4194fdd55bf746..0f05c90cb7f1d286dfea17309a8c7588a0cd7322 100644 (file)
@@ -312,17 +312,17 @@ static const Babl *babl_trc_from_icc (ICC  *state, int offset,
          switch (function_type)
          {
             case 0:
-              g = icc_read (s15f16, offset + 12 + 2 * 0);
+              g = icc_read (s15f16, offset + 12 + 4 * 0);
               return babl_trc_gamma (g);
               break;
             case 3:
               {
                 float a,b,c,d;
-                g = icc_read (s15f16, offset + 12 + 2 * 0);
-                a = icc_read (s15f16, offset + 12 + 2 * 1);
-                b = icc_read (s15f16, offset + 12 + 2 * 2);
-                c = icc_read (s15f16, offset + 12 + 2 * 3);
-                d = icc_read (s15f16, offset + 12 + 2 * 4);
+                g = icc_read (s15f16, offset + 12 + 4 * 0);
+                a = icc_read (s15f16, offset + 12 + 4 * 1);
+                b = icc_read (s15f16, offset + 12 + 4 * 2);
+                c = icc_read (s15f16, offset + 12 + 4 * 3);
+                d = icc_read (s15f16, offset + 12 + 4 * 4);
                 //fprintf (stderr, "%f %f %f %f %f\n", g, a, b, c, d);
                 return babl_trc_formula_srgb (g, a, b, c, d);
               }
@@ -330,13 +330,13 @@ static const Babl *babl_trc_from_icc (ICC  *state, int offset,
             case 4:
               {
                 float a,b,c,d,e,f;
-                g = icc_read (s15f16, offset + 12 + 2 * 0);
-                a = icc_read (s15f16, offset + 12 + 2 * 1);
-                b = icc_read (s15f16, offset + 12 + 2 * 2);
-                c = icc_read (s15f16, offset + 12 + 2 * 3);
-                d = icc_read (s15f16, offset + 12 + 2 * 4);
-                e = icc_read (s15f16, offset + 12 + 2 * 5);
-                f = icc_read (s15f16, offset + 12 + 2 * 6);
+                g = icc_read (s15f16, offset + 12 + 4 * 0);
+                a = icc_read (s15f16, offset + 12 + 4 * 1);
+                b = icc_read (s15f16, offset + 12 + 4 * 2);
+                c = icc_read (s15f16, offset + 12 + 4 * 3);
+                d = icc_read (s15f16, offset + 12 + 4 * 4);
+                e = icc_read (s15f16, offset + 12 + 4 * 5);
+                f = icc_read (s15f16, offset + 12 + 4 * 6);
                 fprintf (stderr, "%f %f %f %f %f %f %f\n",
                               g, a, b, c, d, e, f);
             {